// LCR 027. 回文链表

// 给定一个链表的 头节点 head ，请判断其是否为回文链表。
// 如果一个链表是回文，那么链表节点序列从前往后看和从后往前看是相同的。

#include <stdio.h>
#include <stdbool.h>

struct ListNode
{
    int val;
    struct ListNode *next;
};

// 先把链表的值存储到数组中，再通过数组进行比较
bool isPalindrome(struct ListNode *head)
{
    struct ListNode *p = head;
    int count = 0;
    while (p != NULL)
    {
        count++;
        p = p->next;
    }
    char a[count];
    int i = 0;
    p = head;
    while (p != NULL)
    {
        a[i] = p->val;
        i++;
        p = p->next;
    }

    for (int i = 0, j = count - 1; i <= j; i++, j--)
    {
        if (a[i] != a[j])
            return false;
    }
    return true;
}